import { getSheetIndex, getRangetxt } from "../methods/get";
import { replaceHtml } from "../utils/util";
import formula from "../global/formula";
import { isEditMode } from "../global/validate";
import tooltip from "../global/tooltip";
import { luckysheetrefreshgrid } from "../global/refresh";
import { luckysheetAlternateformatHtml, modelHTML } from "./constant";
import luckysheetsizeauto from "./resize";
import server from "./server";
import { selectHightlightShow } from "./select";
import Store from "../store";
import locale from "../locale/locale";

//交替颜色
const alternateformat = {
  rangefocus: false,
  modelfocusIndex: null,
  FixedModelColor: [
    {
      head: { fc: "#000", bc: "#bfbdbe" },
      one: { fc: "#000", bc: "#ffffff" },
      two: { fc: "#000", bc: "#f8f3f7" },
      foot: { fc: "#000", bc: "#dde2de" },
    },
    {
      head: { fc: "#000", bc: "#4bd4e7" },
      one: { fc: "#000", bc: "#ffffff" },
      two: { fc: "#000", bc: "#eaf7ff" },
      foot: { fc: "#000", bc: "#aae9f8" },
    },
    {
      head: { fc: "#000", bc: "#5ed593" },
      one: { fc: "#000", bc: "#ffffff" },
      two: { fc: "#000", bc: "#e5fbee" },
      foot: { fc: "#000", bc: "#a5efcc" },
    },
    {
      head: { fc: "#000", bc: "#f6cb4b" },
      one: { fc: "#000", bc: "#ffffff" },
      two: { fc: "#000", bc: "#fff9e7" },
      foot: { fc: "#000", bc: "#ffebac" },
    },
    {
      head: { fc: "#000", bc: "#f96420" },
      one: { fc: "#000", bc: "#ffffff" },
      two: { fc: "#000", bc: "#ffe5d9" },
      foot: { fc: "#000", bc: "#ffcfba" },
    },
    {
      head: { fc: "#000", bc: "#5599fc" },
      one: { fc: "#000", bc: "#ffffff" },
      two: { fc: "#000", bc: "#ecf2fe" },
      foot: { fc: "#000", bc: "#afcbfa" },
    },
    {
      head: { fc: "#000", bc: "#22a69b" },
      one: { fc: "#000", bc: "#ffffff" },
      two: { fc: "#000", bc: "#dff2f8" },
      foot: { fc: "#000", bc: "#8dd4d0" },
    },
    {
      head: { fc: "#000", bc: "#7a939a" },
      one: { fc: "#000", bc: "#ffffff" },
      two: { fc: "#000", bc: "#f0eff7" },
      foot: { fc: "#000", bc: "#bdcad0" },
    },
    {
      head: { fc: "#000", bc: "#d7a270" },
      one: { fc: "#000", bc: "#ffffff" },
      two: { fc: "#000", bc: "#fdf3f1" },
      foot: { fc: "#000", bc: "#ead2b6" },
    },
    {
      head: { fc: "#000", bc: "#89c54b" },
      one: { fc: "#000", bc: "#ffffff" },
      two: { fc: "#000", bc: "#f1f7e9" },
      foot: { fc: "#000", bc: "#c5e3a7" },
    },
    {
      head: { fc: "#000", bc: "#8f88f0" },
      one: { fc: "#000", bc: "#ffffff" },
      two: { fc: "#000", bc: "#f0e5ff" },
      foot: { fc: "#000", bc: "#c6c4f6" },
    },
    {
      head: { fc: "#000", bc: "#fd1664" },
      one: { fc: "#000", bc: "#ffffff" },
      two: { fc: "#000", bc: "#feddee" },
      foot: { fc: "#000", bc: "#f98ab5" },
    },
    {
      head: { fc: "#000", bc: "#da96d3" },
      one: { fc: "#000", bc: "#ffffff" },
      two: { fc: "#000", bc: "#fce8fb" },
      foot: { fc: "#000", bc: "#f2caee" },
    },
    {
      head: { fc: "#000", bc: "#b49191" },
      one: { fc: "#000", bc: "#ffffff" },
      two: { fc: "#000", bc: "#f5ebe8" },
      foot: { fc: "#000", bc: "#d8c3c3" },
    },
    {
      head: { fc: "#000", bc: "#91b493" },
      one: { fc: "#000", bc: "#ffffff" },
      two: { fc: "#000", bc: "#f0fbf0" },
      foot: { fc: "#000", bc: "#b4cfb6" },
    },
    {
      head: { fc: "#000", bc: "#b4a891" },
      one: { fc: "#000", bc: "#ffffff" },
      two: { fc: "#000", bc: "#f8f6f1" },
      foot: { fc: "#000", bc: "#d3cab8" },
    },
    {
      head: { fc: "#000", bc: "#91abb4" },
      one: { fc: "#000", bc: "#ffffff" },
      two: { fc: "#000", bc: "#eff7fa" },
      foot: { fc: "#000", bc: "#b7cbd3" },
    },
    {
      head: { fc: "#000", bc: "#b7ba82" },
      one: { fc: "#000", bc: "#ffffff" },
      two: { fc: "#000", bc: "#fafbeb" },
      foot: { fc: "#000", bc: "#dadcb4" },
    },
    {
      head: { fc: "#000", bc: "#df3e3e" },
      one: { fc: "#000", bc: "#ffffff" },
      two: { fc: "#000", bc: "#fde9e9" },
      foot: { fc: "#000", bc: "#f89292" },
    },
    {
      head: { fc: "#000", bc: "#f2711c" },
      one: { fc: "#000", bc: "#ffffff" },
      two: { fc: "#000", bc: "#fef0d7" },
      foot: { fc: "#000", bc: "#fbb335" },
    },
    {
      head: { fc: "#000", bc: "#b5cc18" },
      one: { fc: "#000", bc: "#ffffff" },
      two: { fc: "#000", bc: "#f9fbd4" },
      foot: { fc: "#000", bc: "#e2ed2a" },
    },
    {
      head: { fc: "#000", bc: "#00b5ad" },
      one: { fc: "#000", bc: "#ffffff" },
      two: { fc: "#000", bc: "#ccfaf9" },
      foot: { fc: "#000", bc: "#00e4df" },
    },
    {
      head: { fc: "#000", bc: "#2185d0" },
      one: { fc: "#000", bc: "#ffffff" },
      two: { fc: "#000", bc: "#d8f3fc" },
      foot: { fc: "#000", bc: "#3cc4f0" },
    },
    {
      head: { fc: "#000", bc: "#a5673f" },
      one: { fc: "#000", bc: "#ffffff" },
      two: { fc: "#000", bc: "#f6ede5" },
      foot: { fc: "#000", bc: "#d3a47c" },
    },
  ],
  getModelBox: function(hasRowHeader, hasRowFooter) {
    let _this = this;

    $(
      "#luckysheet-modal-dialog-slider-alternateformat #luckysheet-alternateformat-modelList"
    ).empty();
    $(
      "#luckysheet-modal-dialog-slider-alternateformat #luckysheet-alternateformat-modelCustom"
    ).empty();

    //格式样式 模板
    let modelListHtml = "";

    for (let i = 0; i < _this.FixedModelColor.length; i++) {
      let obj = _this.FixedModelColor[i];

      let color1, color2, color3, color4;

      if (hasRowHeader && hasRowFooter) {
        color1 = obj["head"];
        color2 = obj["one"];
        color3 = obj["two"];
        color4 = obj["foot"];
      } else if (hasRowHeader) {
        color1 = obj["head"];
        color2 = obj["one"];
        color3 = obj["two"];
        color4 = obj["one"];
      } else if (hasRowFooter) {
        color1 = obj["one"];
        color2 = obj["two"];
        color3 = obj["one"];
        color4 = obj["foot"];
      } else {
        color1 = obj["one"];
        color2 = obj["two"];
        color3 = obj["one"];
        color4 = obj["two"];
      }

      modelListHtml +=
        '<div class="modelbox">' +
        '<div class="box">' +
        '<span style="color:' +
        color1["fc"] +
        ";background-color:" +
        color1["bc"] +
        '"> — </span>' +
        '<span style="color:' +
        color2["fc"] +
        ";background-color:" +
        color2["bc"] +
        '"> — </span>' +
        '<span style="color:' +
        color3["fc"] +
        ";background-color:" +
        color3["bc"] +
        '"> — </span>' +
        '<span style="color:' +
        color4["fc"] +
        ";background-color:" +
        color4["bc"] +
        '"> — </span>' +
        "</div>" +
        "</div>";
    }

    $(
      "#luckysheet-modal-dialog-slider-alternateformat #luckysheet-alternateformat-modelList"
    ).append(modelListHtml);

    //自定义 模板
    let modelCustom =
      Store.luckysheetfile[getSheetIndex(Store.currentSheetIndex)][
        "luckysheet_alternateformat_save_modelCustom"
      ];
    if (modelCustom != null && modelCustom.length > 0) {
      let modelCustomHtml = "";

      for (let i = 0; i < modelCustom.length; i++) {
        let obj = modelCustom[i];

        let color1, color2, color3, color4;

        if (hasRowHeader && hasRowFooter) {
          color1 = obj["head"];
          color2 = obj["one"];
          color3 = obj["two"];
          color4 = obj["foot"];
        } else if (hasRowHeader) {
          color1 = obj["head"];
          color2 = obj["one"];
          color3 = obj["two"];
          color4 = obj["one"];
        } else if (hasRowFooter) {
          color1 = obj["one"];
          color2 = obj["two"];
          color3 = obj["one"];
          color4 = obj["foot"];
        } else {
          color1 = obj["one"];
          color2 = obj["two"];
          color3 = obj["one"];
          color4 = obj["two"];
        }

        modelCustomHtml +=
          '<div class="modelbox">' +
          '<div class="box">' +
          '<span style="color:' +
          color1["fc"] +
          ";background-color:" +
          color1["bc"] +
          '"> — </span>' +
          '<span style="color:' +
          color2["fc"] +
          ";background-color:" +
          color2["bc"] +
          '"> — </span>' +
          '<span style="color:' +
          color3["fc"] +
          ";background-color:" +
          color3["bc"] +
          '"> — </span>' +
          '<span style="color:' +
          color4["fc"] +
          ";background-color:" +
          color4["bc"] +
          '"> — </span>' +
          "</div>" +
          "</div>";
      }

      $(
        "#luckysheet-modal-dialog-slider-alternateformat #luckysheet-alternateformat-modelCustom"
      ).append(modelCustomHtml);
    }
  },
  init: function() {
    let _this = this;

    $("#luckysheet-modal-dialog-slider-alternateformat").remove();
    $("body").append(luckysheetAlternateformatHtml());
    luckysheetsizeauto();

    //关闭
    $(
      "#luckysheet-modal-dialog-slider-alternateformat .luckysheet-model-close-btn"
    ).click(function() {
      $("#luckysheet-modal-dialog-slider-alternateformat").hide();
      luckysheetsizeauto();
    });

    //应用范围
    $(document)
      .off("focus.AFrangeInput")
      .on(
        "focus.AFrangeInput",
        "#luckysheet-alternateformat-range input",
        function() {
          _this.rangefocus = true;
        }
      );
    $(document)
      .off("blur.AFrangeInput")
      .on(
        "blur.AFrangeInput",
        "#luckysheet-alternateformat-range input",
        function() {
          _this.rangefocus = false;
        }
      );

    $(document)
      .off("keydown.AFrangeInput")
      .on(
        "keydown.AFrangeInput",
        "#luckysheet-alternateformat-range input",
        function(e) {
          let rangeValue = $(this)
            .val()
            .trim();
          if (e.keyCode == 13) {
            _this.update();
          }
        }
      );
    $(document)
      .off("click.AFrangeIcon")
      .on(
        "click.AFrangeIcon",
        "#luckysheet-alternateformat-range .fa-table",
        function() {
          $("#luckysheet-modal-dialog-slider-alternateformat").hide();
          luckysheetsizeauto();

          let rangeValue = $(this)
            .parents("#luckysheet-alternateformat-range")
            .find("input")
            .val()
            .trim();
          _this.rangeDialog(rangeValue);
        }
      );
    $(document)
      .off("click.AFrDCf")
      .on(
        "click.AFrDCf",
        "#luckysheet-alternateformat-rangeDialog-confirm",
        function() {
          let rangeValue = $(this)
            .parents("#luckysheet-alternateformat-rangeDialog")
            .find("input")
            .val()
            .trim();
          $(
            "#luckysheet-modal-dialog-slider-alternateformat #luckysheet-alternateformat-range input"
          ).val(rangeValue);

          $(this)
            .parents("#luckysheet-alternateformat-rangeDialog")
            .hide();
          $("#luckysheet-modal-dialog-slider-alternateformat").show();
          luckysheetsizeauto();

          _this.update();
        }
      );
    $(document)
      .off("click.AFrDCl")
      .on(
        "click.AFrDCl",
        "#luckysheet-alternateformat-rangeDialog-close",
        function() {
          $(this)
            .parents("#luckysheet-alternateformat-rangeDialog")
            .hide();
          $("#luckysheet-modal-dialog-slider-alternateformat").show();
          luckysheetsizeauto();
        }
      );
    $(document)
      .off("click.AFrDTitle")
      .on(
        "click.AFrDTitle",
        "#luckysheet-alternateformat-rangeDialog .luckysheet-modal-dialog-title-close",
        function() {
          $(this)
            .parents("#luckysheet-alternateformat-rangeDialog")
            .hide();
          $("#luckysheet-modal-dialog-slider-alternateformat").show();
          luckysheetsizeauto();
        }
      );

    //页眉、页脚选中
    $(document)
      .off("change.AFrowHeader")
      .on(
        "change.AFrowHeader",
        "#luckysheet-alternateformat-rowHeader",
        function() {
          let hasRowHeader;
          if ($(this).is(":checked")) {
            hasRowHeader = true;
          } else {
            hasRowHeader = false;
          }

          let hasRowFooter;
          if ($("#luckysheet-alternateformat-rowFooter").is(":checked")) {
            hasRowFooter = true;
          } else {
            hasRowFooter = false;
          }

          _this.checkboxChange(hasRowHeader, hasRowFooter);
          _this.modelboxOn();
          _this.update();
        }
      );
    $(document)
      .off("change.AFrowFooter")
      .on(
        "change.AFrowFooter",
        "#luckysheet-alternateformat-rowFooter",
        function() {
          let hasRowHeader;
          if ($("#luckysheet-alternateformat-rowHeader").is(":checked")) {
            hasRowHeader = true;
          } else {
            hasRowHeader = false;
          }

          let hasRowFooter;
          if ($(this).is(":checked")) {
            hasRowFooter = true;
          } else {
            hasRowFooter = false;
          }

          _this.checkboxChange(hasRowHeader, hasRowFooter);
          _this.modelboxOn();
          _this.update();
        }
      );

    //点击样式模板
    $(document)
      .off("click.AFmodelbox")
      .on(
        "click.AFmodelbox",
        "#luckysheet-modal-dialog-slider-alternateformat .modelbox",
        function() {
          let index = $(this).index();
          let $id = $(this)
            .parents(".cf")
            .attr("id");

          if ($id == "luckysheet-alternateformat-modelList") {
            _this.modelfocusIndex = index;
          } else if ($id == "luckysheet-alternateformat-modelCustom") {
            let len = _this.FixedModelColor.length;
            _this.modelfocusIndex = index + len;
          }

          _this.modelboxOn();
          _this.update();
        }
      );

    //点击选择文本/单元格颜色
    $(document)
      .off("click.AFselectColor")
      .on(
        "click.AFselectColor",
        "#luckysheet-modal-dialog-slider-alternateformat .luckysheet-color-menu-button-indicator",
        function() {
          let $parent = $(this).closest(".toningbox");

          let colorType, currenColor;
          if (
            $(this)
              .find(".luckysheet-icon-img")
              .hasClass("luckysheet-icon-text-color")
          ) {
            colorType = "fc";
            currenColor = $parent.find(".toningShow").data("fc");
          } else if (
            $(this)
              .find(".luckysheet-icon-img")
              .hasClass("luckysheet-icon-cell-color")
          ) {
            colorType = "bc";
            currenColor = $parent.find(".toningShow").data("bc");
          }

          //source
          let source;
          if ($parent.hasClass("header")) {
            source = "0";
          } else if ($parent.hasClass("ctOne")) {
            source = "1";
          } else if ($parent.hasClass("ctTwo")) {
            source = "2";
          } else if ($parent.hasClass("footer")) {
            source = "3";
          }

          _this.colorSelectDialog(currenColor, colorType, source);
        }
      );

    //选择颜色 确定 添加自定义模板
    $(document)
      .off("click.AFselectColorConfirm")
      .on(
        "click.AFselectColorConfirm",
        "#luckysheet-alternateformat-colorSelect-dialog-confirm",
        function() {
          let $parent = $(this).parents(
            "#luckysheet-alternateformat-colorSelect-dialog"
          );
          const _locale = locale();
          const alternatingColors = _locale.alternatingColors;
          $("#luckysheet-modal-dialog-mask").hide();
          $parent.hide();

          //获取currenColor colorType source
          let currenColor = $parent.find(".currenColor span").attr("title");

          let colorType;
          if (
            $parent.find(".luckysheet-modal-dialog-title-text").text() ==
            alternatingColors.selectionTextColor
          ) {
            colorType = "fc";
          } else if (
            $parent.find(".luckysheet-modal-dialog-title-text").text() ==
            alternatingColors.selectionCellColor
          ) {
            colorType = "bc";
          }

          let source = $parent.find(".currenColor").attr("data-source");

          //赋给颜色
          if (source == "0") {
            if (colorType == "fc") {
              $(
                "#luckysheet-alternateformat-modelToning .header .toningShow"
              ).css("color", currenColor);
              $(
                "#luckysheet-alternateformat-modelToning .header .toningShow"
              ).data("fc", currenColor);
              $(
                "#luckysheet-alternateformat-modelToning .header .luckysheet-icon-text-color"
              )
                .parents(".luckysheet-color-menu-button-indicator")
                .css("border-bottom-color", currenColor);
            }
            if (colorType == "bc") {
              $(
                "#luckysheet-alternateformat-modelToning .header .toningShow"
              ).css("background-color", currenColor);
              $(
                "#luckysheet-alternateformat-modelToning .header .toningShow"
              ).data("bc", currenColor);
              $(
                "#luckysheet-alternateformat-modelToning .header .luckysheet-icon-cell-color"
              )
                .parents(".luckysheet-color-menu-button-indicator")
                .css("border-bottom-color", currenColor);
            }
          } else if (source == "1") {
            if (colorType == "fc") {
              $(
                "#luckysheet-alternateformat-modelToning .ctOne .toningShow"
              ).css("color", currenColor);
              $(
                "#luckysheet-alternateformat-modelToning .ctOne .toningShow"
              ).data("fc", currenColor);
              $(
                "#luckysheet-alternateformat-modelToning .ctOne .luckysheet-icon-text-color"
              )
                .parents(".luckysheet-color-menu-button-indicator")
                .css("border-bottom-color", currenColor);
            }
            if (colorType == "bc") {
              $(
                "#luckysheet-alternateformat-modelToning .ctOne .toningShow"
              ).css("background-color", currenColor);
              $(
                "#luckysheet-alternateformat-modelToning .ctOne .toningShow"
              ).data("bc", currenColor);
              $(
                "#luckysheet-alternateformat-modelToning .ctOne .luckysheet-icon-cell-color"
              )
                .parents(".luckysheet-color-menu-button-indicator")
                .css("border-bottom-color", currenColor);
            }
          } else if (source == "2") {
            if (colorType == "fc") {
              $(
                "#luckysheet-alternateformat-modelToning .ctTwo .toningShow"
              ).css("color", currenColor);
              $(
                "#luckysheet-alternateformat-modelToning .ctTwo .toningShow"
              ).data("fc", currenColor);
              $(
                "#luckysheet-alternateformat-modelToning .ctTwo .luckysheet-icon-text-color"
              )
                .parents(".luckysheet-color-menu-button-indicator")
                .css("border-bottom-color", currenColor);
            }
            if (colorType == "bc") {
              $(
                "#luckysheet-alternateformat-modelToning .ctTwo .toningShow"
              ).css("background-color", currenColor);
              $(
                "#luckysheet-alternateformat-modelToning .ctTwo .toningShow"
              ).data("bc", currenColor);
              $(
                "#luckysheet-alternateformat-modelToning .ctTwo .luckysheet-icon-cell-color"
              )
                .parents(".luckysheet-color-menu-button-indicator")
                .css("border-bottom-color", currenColor);
            }
          } else if (source == "3") {
            if (colorType == "fc") {
              $(
                "#luckysheet-alternateformat-modelToning .footer .toningShow"
              ).css("color", currenColor);
              $(
                "#luckysheet-alternateformat-modelToning .footer .toningShow"
              ).data("fc", currenColor);
              $(
                "#luckysheet-alternateformat-modelToning .footer .luckysheet-icon-text-color"
              )
                .parents(".luckysheet-color-menu-button-indicator")
                .css("border-bottom-color", currenColor);
            }
            if (colorType == "bc") {
              $(
                "#luckysheet-alternateformat-modelToning .footer .toningShow"
              ).css("background-color", currenColor);
              $(
                "#luckysheet-alternateformat-modelToning .footer .toningShow"
              ).data("bc", currenColor);
              $(
                "#luckysheet-alternateformat-modelToning .footer .luckysheet-icon-cell-color"
              )
                .parents(".luckysheet-color-menu-button-indicator")
                .css("border-bottom-color", currenColor);
            }
          }

          //若模板聚焦在固有模板，则新加模板；若模板聚焦在自定义模板，则修改该模板
          let hasRowHeader;
          if ($("#luckysheet-alternateformat-rowHeader").is(":checked")) {
            hasRowHeader = true;
          } else {
            hasRowHeader = false;
          }

          let hasRowFooter;
          if ($("#luckysheet-alternateformat-rowFooter").is(":checked")) {
            hasRowFooter = true;
          } else {
            hasRowFooter = false;
          }

          let index = _this.modelfocusIndex;
          let len = _this.FixedModelColor.length;

          let format, file;
          if (index < len) {
            format = $.extend(true, {}, _this.getFormatByIndex());
          } else {
            file = Store.luckysheetfile[getSheetIndex(Store.currentSheetIndex)];
            let modelCustom =
              file["luckysheet_alternateformat_save_modelCustom"];

            format = $.extend(true, {}, modelCustom[index - len]);
          }

          if (source == "0") {
            if (colorType == "fc") {
              format["head"]["fc"] = currenColor;
            } else if (colorType == "bc") {
              format["head"]["bc"] = currenColor;
            }
          } else if (source == "1") {
            if (colorType == "fc") {
              format["one"]["fc"] = currenColor;
            } else if (colorType == "bc") {
              format["one"]["bc"] = currenColor;
            }
          } else if (source == "2") {
            if (colorType == "fc") {
              format["two"]["fc"] = currenColor;
            } else if (colorType == "bc") {
              format["two"]["bc"] = currenColor;
            }
          } else if (source == "3") {
            if (colorType == "fc") {
              format["foot"]["fc"] = currenColor;
            }
            if (colorType == "bc") {
              format["foot"]["bc"] = currenColor;
            }
          }

          if (_this.modelfocusIndex < len) {
            _this.addCustomModel(format);
            _this.modelfocusIndex = _this.getIndexByFormat(format);
          } else {
            file["luckysheet_alternateformat_save_modelCustom"][
              index - len
            ] = format;

            if (server.allowUpdate) {
              server.saveParam(
                "all",
                Store.currentSheetIndex,
                file["luckysheet_alternateformat_save_modelCustom"],
                { k: "luckysheet_alternateformat_save_modelCustom" }
              );
            }
          }

          _this.getModelBox(hasRowHeader, hasRowFooter);
          _this.modelboxOn();
          _this.update();
        }
      );

    //点击 移除交替颜色 按钮
    $(document)
      .off("click.AFremove")
      .on("click.AFremove", "#luckysheet-alternateformat-remove", function() {
        let dataIndex = $(this).data("index");

        let file = Store.luckysheetfile[getSheetIndex(Store.currentSheetIndex)];

        let ruleArr = file["luckysheet_alternateformat_save"];

        //保存之前的规则
        let historyRules = $.extend(true, [], ruleArr);

        //保存当前的规则
        if (ruleArr.length > 1) {
          ruleArr.splice(dataIndex, 1);
        } else {
          ruleArr = [];
        }

        let currentRules = $.extend(true, [], ruleArr);

        //刷新一次表格
        _this.ref(historyRules, currentRules);

        if (server.allowUpdate) {
          server.saveParam("all", Store.currentSheetIndex, ruleArr, {
            k: "luckysheet_alternateformat_save",
          });
        }

        //隐藏一些dom
        $("#luckysheet-modal-dialog-mask").hide();
        $("#luckysheet-modal-dialog-slider-alternateformat").hide();

        luckysheetsizeauto();
      });
  },
  perfect: function() {
    let _this = this;

    let range = $.extend(true, {}, Store.luckysheet_select_save[0]);
    let existsIndex = _this.rangeIsExists(range)[1];

    let obj = $.extend(
      true,
      {},
      Store.luckysheetfile[getSheetIndex(Store.currentSheetIndex)][
        "luckysheet_alternateformat_save"
      ][existsIndex]
    );

    //应用范围
    let cellrange = obj["cellrange"];
    $("#luckysheet-alternateformat-range input").val(
      getRangetxt(
        Store.currentSheetIndex,
        { row: cellrange["row"], column: cellrange["column"] },
        Store.currentSheetIndex
      )
    );

    Store.luckysheet_select_save = [
      { row: cellrange["row"], column: cellrange["column"] },
    ];
    selectHightlightShow();

    //页眉、页脚
    let hasRowHeader = obj["hasRowHeader"];
    let hasRowFooter = obj["hasRowFooter"];

    //模板聚焦
    let format = obj["format"];
    _this.modelfocusIndex = _this.getIndexByFormat(format);

    if (_this.modelfocusIndex == null) {
      _this.addCustomModel(format);
      _this.modelfocusIndex = _this.getIndexByFormat(format);
    }

    _this.checkboxChange(hasRowHeader, hasRowFooter);
    _this.modelboxOn();

    //标识 交替颜色的index
    $("#luckysheet-alternateformat-remove").data("index", existsIndex);
  },
  checkboxChange: function(hasRowHeader, hasRowFooter) {
    if (hasRowHeader) {
      $("#luckysheet-alternateformat-rowHeader").prop("checked", true);
      $("#luckysheet-alternateformat-modelToning .header").show();
    } else {
      $("#luckysheet-alternateformat-rowHeader").removeAttr("checked");
      $("#luckysheet-alternateformat-modelToning .header").hide();
    }

    if (hasRowFooter) {
      $("#luckysheet-alternateformat-rowFooter").prop("checked", true);
      $("#luckysheet-alternateformat-modelToning .footer").show();
    } else {
      $("#luckysheet-alternateformat-rowFooter").removeAttr("checked");
      $("#luckysheet-alternateformat-modelToning .footer").hide();
    }

    this.getModelBox(hasRowHeader, hasRowFooter);
  },
  modelboxOn: function() {
    let _this = this;

    //模板 foucs
    $("#luckysheet-modal-dialog-slider-alternateformat .modelbox").removeClass(
      "on"
    );

    let index = _this.modelfocusIndex;
    let len = _this.FixedModelColor.length;

    if (index < len) {
      $("#luckysheet-alternateformat-modelList .modelbox")
        .eq(index)
        .addClass("on");
    } else {
      $("#luckysheet-alternateformat-modelCustom .modelbox")
        .eq(index - len)
        .addClass("on");
    }

    //编辑 对应颜色改变
    _this.modelToningColor();
  },
  modelToningColor: function() {
    let format = this.getFormatByIndex();

    //页眉
    $("#luckysheet-alternateformat-modelToning .header .toningShow").css({
      color: format["head"].fc,
      "background-color": format["head"].bc,
    });
    $("#luckysheet-alternateformat-modelToning .header .toningShow")
      .data("fc", format["head"].fc)
      .data("bc", format["head"].bc);
    $(
      "#luckysheet-alternateformat-modelToning .header .luckysheet-icon-text-color"
    )
      .parents(".luckysheet-color-menu-button-indicator")
      .css("border-bottom-color", format["head"].fc);
    $(
      "#luckysheet-alternateformat-modelToning .header .luckysheet-icon-cell-color"
    )
      .parents(".luckysheet-color-menu-button-indicator")
      .css("border-bottom-color", format["head"].bc);

    //颜色1
    $("#luckysheet-alternateformat-modelToning .ctOne .toningShow").css({
      color: format["one"].fc,
      "background-color": format["one"].bc,
    });
    $("#luckysheet-alternateformat-modelToning .ctOne .toningShow")
      .data("fc", format["one"].fc)
      .data("bc", format["one"].bc);
    $(
      "#luckysheet-alternateformat-modelToning .ctOne .luckysheet-icon-text-color"
    )
      .parents(".luckysheet-color-menu-button-indicator")
      .css("border-bottom-color", format["one"].fc);
    $(
      "#luckysheet-alternateformat-modelToning .ctOne .luckysheet-icon-cell-color"
    )
      .parents(".luckysheet-color-menu-button-indicator")
      .css("border-bottom-color", format["one"].bc);

    //颜色2
    $("#luckysheet-alternateformat-modelToning .ctTwo .toningShow").css({
      color: format["two"].fc,
      "background-color": format["two"].bc,
    });
    $("#luckysheet-alternateformat-modelToning .ctTwo .toningShow")
      .data("fc", format["two"].fc)
      .data("bc", format["two"].bc);
    $(
      "#luckysheet-alternateformat-modelToning .ctTwo .luckysheet-icon-text-color"
    )
      .parents(".luckysheet-color-menu-button-indicator")
      .css("border-bottom-color", format["two"].fc);
    $(
      "#luckysheet-alternateformat-modelToning .ctTwo .luckysheet-icon-cell-color"
    )
      .parents(".luckysheet-color-menu-button-indicator")
      .css("border-bottom-color", format["two"].bc);

    //页脚
    $("#luckysheet-alternateformat-modelToning .footer .toningShow").css({
      color: format["foot"].fc,
      "background-color": format["foot"].bc,
    });
    $("#luckysheet-alternateformat-modelToning .footer .toningShow")
      .data("fc", format["foot"].fc)
      .data("bc", format["foot"].bc);
    $(
      "#luckysheet-alternateformat-modelToning .footer .luckysheet-icon-text-color"
    )
      .parents(".luckysheet-color-menu-button-indicator")
      .css("border-bottom-color", format["foot"].fc);
    $(
      "#luckysheet-alternateformat-modelToning .footer .luckysheet-icon-cell-color"
    )
      .parents(".luckysheet-color-menu-button-indicator")
      .css("border-bottom-color", format["foot"].bc);
  },
  addCustomModel: function(format) {
    let file = Store.luckysheetfile[getSheetIndex(Store.currentSheetIndex)];

    if (file["luckysheet_alternateformat_save_modelCustom"] == null) {
      file["luckysheet_alternateformat_save_modelCustom"] = [];
    }

    file["luckysheet_alternateformat_save_modelCustom"].push(format);

    if (server.allowUpdate) {
      server.saveParam(
        "all",
        Store.currentSheetIndex,
        file["luckysheet_alternateformat_save_modelCustom"],
        { k: "luckysheet_alternateformat_save_modelCustom" }
      );
    }
  },
  colorSelectDialog: function(currenColor, colorType, source) {
    $("#luckysheet-modal-dialog-mask").show();
    $("#luckysheet-alternateformat-colorSelect-dialog").remove();

    const _locale = locale();
    const alternatingColors = _locale.alternatingColors;
    const locale_button = _locale.button;
    const locale_toolbar = _locale.toolbar;

    let title;
    if (colorType == "fc") {
      title = alternatingColors.selectionTextColor;
    } else if (colorType == "bc") {
      title = alternatingColors.selectionCellColor;
    }

    $("body").append(
      replaceHtml(modelHTML, {
        id: "luckysheet-alternateformat-colorSelect-dialog",
        addclass: "luckysheet-alternateformat-colorSelect-dialog",
        title: title,
        content:
          "<div class='currenColor' data-source='" +
          source +
          "'>" +
          alternatingColors.currentColor +
          "：<span title='" +
          currenColor +
          "' style='background-color:" +
          currenColor +
          "'></span></div><div class='colorshowbox'></div>",
        botton:
          '<button id="luckysheet-alternateformat-colorSelect-dialog-confirm" class="btn btn-primary">' +
          locale_button.confirm +
          '</button><button class="btn btn-default luckysheet-model-close-btn">' +
          locale_button.cancel +
          "</button>",
        style: "z-index:100003",
      })
    );
    let $t = $("#luckysheet-alternateformat-colorSelect-dialog")
        .find(".luckysheet-modal-dialog-content")
        .css("min-width", 300)
        .end(),
      myh = $t.outerHeight(),
      myw = $t.outerWidth();
    let winw = $(window).width(),
      winh = $(window).height();
    let scrollLeft = $(document).scrollLeft(),
      scrollTop = $(document).scrollTop();
    $("#luckysheet-alternateformat-colorSelect-dialog")
      .css({
        left: (winw + scrollLeft - myw) / 2,
        top: (winh + scrollTop - myh) / 3,
      })
      .show();

    //初始化选择颜色插件
    $("#luckysheet-alternateformat-colorSelect-dialog")
      .find(".colorshowbox")
      .spectrum({
        showPalette: true,
        showPaletteOnly: true,
        preferredFormat: "hex",
        clickoutFiresChange: false,
        showInitial: true,
        showInput: true,
        flat: true,
        hideAfterPaletteSelect: true,
        showSelectionPalette: true,
        showButtons: false, //隐藏选择取消按钮
        maxPaletteSize: 8,
        maxSelectionSize: 8,
        color: currenColor,
        cancelText: locale_button.cancel,
        chooseText: locale_toolbar.confirmColor,
        togglePaletteMoreText: locale_toolbar.customColor,
        togglePaletteLessText: locale_toolbar.collapse,
        togglePaletteOnly: true,
        clearText: locale_toolbar.clearText,
        noColorSelectedText: locale_toolbar.noColorSelectedText,
        localStorageKey: "spectrum.textcolor" + server.gridKey,
        palette: [
          ["#000", "#444", "#666", "#999", "#ccc", "#eee", "#f3f3f3", "#fff"],
          ["#f00", "#f90", "#ff0", "#0f0", "#0ff", "#00f", "#90f", "#f0f"],
          [
            "#f4cccc",
            "#fce5cd",
            "#fff2cc",
            "#d9ead3",
            "#d0e0e3",
            "#cfe2f3",
            "#d9d2e9",
            "#ead1dc",
          ],
          [
            "#ea9999",
            "#f9cb9c",
            "#ffe599",
            "#b6d7a8",
            "#a2c4c9",
            "#9fc5e8",
            "#b4a7d6",
            "#d5a6bd",
          ],
          [
            "#e06666",
            "#f6b26b",
            "#ffd966",
            "#93c47d",
            "#76a5af",
            "#6fa8dc",
            "#8e7cc3",
            "#c27ba0",
          ],
          [
            "#c00",
            "#e69138",
            "#f1c232",
            "#6aa84f",
            "#45818e",
            "#3d85c6",
            "#674ea7",
            "#a64d79",
          ],
          [
            "#900",
            "#b45f06",
            "#bf9000",
            "#38761d",
            "#134f5c",
            "#0b5394",
            "#351c75",
            "#741b47",
          ],
          [
            "#600",
            "#783f04",
            "#7f6000",
            "#274e13",
            "#0c343d",
            "#073763",
            "#20124d",
            "#4c1130",
          ],
        ],
        move: function(color) {
          if (color != null) {
            color = color.toHexString();
          } else {
            color = "#000";
          }

          $("#luckysheet-alternateformat-colorSelect-dialog .currenColor span")
            .css("background-color", color)
            .attr("title", color);
        },
      });
  },
  rangeDialog: function(value) {
    $("#luckysheet-modal-dialog-mask").hide();
    $("#luckysheet-alternateformat-rangeDialog").remove();

    const _locale = locale();
    const alternatingColors = _locale.alternatingColors;
    const locale_button = _locale.button;

    $("body").append(
      replaceHtml(modelHTML, {
        id: "luckysheet-alternateformat-rangeDialog",
        addclass: "luckysheet-alternateformat-rangeDialog",
        title: alternatingColors.selectRange,
        content:
          '<input readonly="readonly" placeholder="' +
          alternatingColors.tipSelectRange +
          '" value="' +
          value +
          '"/>',
        botton:
          '<button id="luckysheet-alternateformat-rangeDialog-confirm" class="btn btn-primary">' +
          locale_button.confirm +
          '</button><button id="luckysheet-alternateformat-rangeDialog-close" class="btn btn-default">' +
          locale_button.cancel +
          "</button>",
        style: "z-index:100003",
      })
    );
    let $t = $("#luckysheet-alternateformat-rangeDialog")
        .find(".luckysheet-modal-dialog-content")
        .css("min-width", 300)
        .end(),
      myh = $t.outerHeight(),
      myw = $t.outerWidth();
    let winw = $(window).width(),
      winh = $(window).height();
    let scrollLeft = $(document).scrollLeft(),
      scrollTop = $(document).scrollTop();
    $("#luckysheet-alternateformat-rangeDialog")
      .css({
        left: (winw + scrollLeft - myw) / 2,
        top: (winh + scrollTop - myh) / 3,
      })
      .show();
  },
  rangeIsExists: function(range, index) {
    let _this = this;

    let isExists = false;
    let existsIndex = null;

    //获取已有交替颜色所有应用范围
    let AFarr = $.extend(
      true,
      [],
      Store.luckysheetfile[getSheetIndex(Store.currentSheetIndex)][
        "luckysheet_alternateformat_save"
      ]
    );

    if (index != undefined && index != null) {
      if (AFarr.length > 1) {
        AFarr.splice(index, 1);
      } else {
        AFarr = [];
      }
    }

    if (AFarr.length > 0) {
      let arr = [];
      for (let i = 0; i < AFarr.length; i++) {
        let obj = {
          index: i,
          map: _this.getRangeMap(
            AFarr[i]["cellrange"]["row"],
            AFarr[i]["cellrange"]["column"]
          ),
        };

        arr.push(obj);
      }

      //获取当前选区
      let rangeMap = _this.getRangeMap(range["row"], range["column"]);

      //遍历
      for (let x in rangeMap) {
        if (isExists) {
          break;
        }

        for (let j = 0; j < arr.length; j++) {
          if (x in arr[j]["map"]) {
            isExists = true;
            existsIndex = arr[j]["index"];
            break;
          }
        }
      }
    }

    return [isExists, existsIndex];
  },
  getRangeMap: function(row, column) {
    let map = {};
    let st_r = row[0],
      ed_r = row[1],
      st_c = column[0],
      ed_c = column[1];

    for (let r = st_r; r <= ed_r; r++) {
      for (let c = st_c; c <= ed_c; c++) {
        map[r + "_" + c] = 0;
      }
    }

    return map;
  },
  getIndexByFormat: function(format) {
    let _this = this;
    let index = null;

    //格式样式 模板
    let modelList = _this.FixedModelColor;
    for (let i = 0; i < modelList.length; i++) {
      let obj = modelList[i];

      if (
        format["head"].fc == obj["head"].fc &&
        format["head"].bc == obj["head"].bc
      ) {
        if (
          format["one"].fc == obj["one"].fc &&
          format["one"].bc == obj["one"].bc
        ) {
          if (
            format["two"].fc == obj["two"].fc &&
            format["two"].bc == obj["two"].bc
          ) {
            if (
              format["foot"].fc == obj["foot"].fc &&
              format["foot"].bc == obj["foot"].bc
            ) {
              index = i;
              break;
            }
          }
        }
      }
    }

    //自定义 模板
    let modelCustom =
      Store.luckysheetfile[getSheetIndex(Store.currentSheetIndex)][
        "luckysheet_alternateformat_save_modelCustom"
      ];
    if (modelCustom != null && modelCustom.length > 0) {
      for (let j = 0; j < modelCustom.length; j++) {
        let obj = modelCustom[j];

        if (
          format["head"].fc == obj["head"].fc &&
          format["head"].bc == obj["head"].bc
        ) {
          if (
            format["one"].fc == obj["one"].fc &&
            format["one"].bc == obj["one"].bc
          ) {
            if (
              format["two"].fc == obj["two"].fc &&
              format["two"].bc == obj["two"].bc
            ) {
              if (
                format["foot"].fc == obj["foot"].fc &&
                format["foot"].bc == obj["foot"].bc
              ) {
                index = modelList.length + j;
                break;
              }
            }
          }
        }
      }
    }

    return index;
  },
  getFormatByIndex: function() {
    let _this = this;

    let index = _this.modelfocusIndex;
    let len = _this.FixedModelColor.length;

    let format = {};

    if (index < len) {
      format = _this.FixedModelColor[index];
    } else {
      format =
        Store.luckysheetfile[getSheetIndex(Store.currentSheetIndex)][
          "luckysheet_alternateformat_save_modelCustom"
        ][index - len];
    }

    return format;
  },
  new: function(cellrange) {
    let _this = this;

    let format = _this.getFormatByIndex();

    let file = Store.luckysheetfile[getSheetIndex(Store.currentSheetIndex)];
    let ruleArr = file["luckysheet_alternateformat_save"];

    if (ruleArr == null) {
      ruleArr = [];
    }

    //保存之前的规则
    let historyRules = $.extend(true, [], ruleArr);

    //保存当前的规则
    let obj = {
      cellrange: {
        row: cellrange["row"],
        column: cellrange["column"],
      },
      format: format,
      hasRowHeader: true,
      hasRowFooter: false,
    };

    ruleArr.push(obj);

    let currentRules = $.extend(true, [], ruleArr);

    //刷新一次表格
    _this.ref(historyRules, currentRules);

    if (server.allowUpdate) {
      server.saveParam("all", Store.currentSheetIndex, ruleArr, {
        k: "luckysheet_alternateformat_save",
      });
    }
  },
  update: function() {
    let _this = this;
    const _locale = locale();
    const alternatingColors = _locale.alternatingColors;
    //获取标识
    let dataIndex = $("#luckysheet-alternateformat-remove").data("index");

    //应用范围
    let rangeValue = $(
      "#luckysheet-modal-dialog-slider-alternateformat #luckysheet-alternateformat-range input"
    )
      .val()
      .trim();

    if (!formula.iscelldata(rangeValue)) {
      if (isEditMode()) {
        alert(alternatingColors.errorNoRange);
      } else {
        tooltip.info(alternatingColors.errorNoRange, "");
      }

      return;
    }

    let cellrange = formula.getcellrange(rangeValue);
    let isExists = _this.rangeIsExists(cellrange, dataIndex)[0];

    if (isExists) {
      if (isEditMode()) {
        alert(alternatingColors.errorExistColors);
      } else {
        tooltip.info(alternatingColors.errorExistColors, "");
      }

      return;
    }

    //页眉、页脚
    let hasRowHeader;
    if (
      $(
        "#luckysheet-modal-dialog-slider-alternateformat #luckysheet-alternateformat-rowHeader"
      ).is(":checked")
    ) {
      hasRowHeader = true;
    } else {
      hasRowHeader = false;
    }

    let hasRowFooter;
    if (
      $(
        "#luckysheet-modal-dialog-slider-alternateformat #luckysheet-alternateformat-rowFooter"
      ).is(":checked")
    ) {
      hasRowFooter = true;
    } else {
      hasRowFooter = false;
    }

    //获取选中样式模板的颜色
    let format = _this.getFormatByIndex();
    let file = Store.luckysheetfile[getSheetIndex(Store.currentSheetIndex)];

    let ruleArr = file["luckysheet_alternateformat_save"];
    if (ruleArr == null) {
      ruleArr = [];
    }

    //保存之前的规则
    let historyRules = $.extend(true, [], ruleArr);

    //保存当前的规则
    let obj = {
      cellrange: {
        row: cellrange["row"],
        column: cellrange["column"],
      },
      format: format,
      hasRowHeader: hasRowHeader,
      hasRowFooter: hasRowFooter,
    };

    ruleArr[dataIndex] = obj;

    let currentRules = $.extend(true, [], ruleArr);

    //刷新一次表格
    _this.ref(historyRules, currentRules);

    if (server.allowUpdate) {
      server.saveParam("all", Store.currentSheetIndex, ruleArr, {
        k: "luckysheet_alternateformat_save",
      });
    }
  },
  checksAF: function(r, c, computeMap) {
    if (r + "_" + c in computeMap) {
      //返回值（fc  bc）
      return computeMap[r + "_" + c];
    } else {
      return null;
    }
  },
  getComputeMap: function() {
    let file = Store.luckysheetfile[getSheetIndex(Store.currentSheetIndex)];
    let ruleArr = file["luckysheet_alternateformat_save"];

    let computeMap = this.compute(ruleArr);

    return computeMap;
  },
  compute: function(obj) {
    //计算存储
    let computeMap = {};

    if (obj != null && obj.length > 0) {
      for (let i = 0; i < obj.length; i++) {
        let cellrange = obj[i]["cellrange"];
        let format = obj[i]["format"];
        let hasRowHeader = obj[i]["hasRowHeader"];
        let hasRowFooter = obj[i]["hasRowFooter"];
        let st_r = cellrange["row"][0],
          ed_r = cellrange["row"][1],
          st_c = cellrange["column"][0],
          ed_c = cellrange["column"][1];

        if (hasRowHeader && hasRowFooter) {
          //页眉所在行
          for (let c = st_c; c <= ed_c; c++) {
            computeMap[st_r + "_" + c] = [format["head"].fc, format["head"].bc];
          }

          //中间行
          if (ed_r - st_r > 1) {
            for (let r = st_r + 1; r < ed_r; r++) {
              let fc, bc;
              if ((r - st_r) % 2 != 0) {
                fc = format["one"].fc;
                bc = format["one"].bc;
              } else {
                fc = format["two"].fc;
                bc = format["two"].bc;
              }

              for (let c = st_c; c <= ed_c; c++) {
                computeMap[r + "_" + c] = [fc, bc];
              }
            }
          }

          //页脚所在行
          if (ed_r > st_r) {
            for (let c = st_c; c <= ed_c; c++) {
              computeMap[ed_r + "_" + c] = [
                format["foot"].fc,
                format["foot"].bc,
              ];
            }
          }
        } else if (hasRowHeader) {
          //页眉所在行
          for (let c = st_c; c <= ed_c; c++) {
            computeMap[st_r + "_" + c] = [format["head"].fc, format["head"].bc];
          }

          //中间行
          if (ed_r > st_r) {
            for (let r = st_r + 1; r <= ed_r; r++) {
              let fc, bc;
              if ((r - st_r) % 2 != 0) {
                fc = format["one"].fc;
                bc = format["one"].bc;
              } else {
                fc = format["two"].fc;
                bc = format["two"].bc;
              }

              for (let c = st_c; c <= ed_c; c++) {
                computeMap[r + "_" + c] = [fc, bc];
              }
            }
          }
        } else if (hasRowFooter) {
          //中间行
          if (ed_r > st_r) {
            for (let r = st_r; r < ed_r; r++) {
              let fc, bc;
              if ((r - st_r) % 2 == 0) {
                fc = format["one"].fc;
                bc = format["one"].bc;
              } else {
                fc = format["two"].fc;
                bc = format["two"].bc;
              }

              for (let c = st_c; c <= ed_c; c++) {
                computeMap[r + "_" + c] = [fc, bc];
              }
            }
          }

          //页脚所在行
          for (let c = st_c; c <= ed_c; c++) {
            computeMap[ed_r + "_" + c] = [format["foot"].fc, format["foot"].bc];
          }
        } else {
          //中间行
          for (let r = st_r; r <= ed_r; r++) {
            let fc, bc;
            if ((r - st_r) % 2 == 0) {
              fc = format["one"].fc;
              bc = format["one"].bc;
            } else {
              fc = format["two"].fc;
              bc = format["two"].bc;
            }

            for (let c = st_c; c <= ed_c; c++) {
              computeMap[r + "_" + c] = [fc, bc];
            }
          }
        }
      }
    }

    return computeMap;
  },
  ref: function(historyRules, currentRules) {
    if (Store.clearjfundo) {
      Store.jfundo.length = 0;

      let redo = {};
      redo["type"] = "updateAF";
      redo["sheetIndex"] = Store.currentSheetIndex;
      redo["data"] = { historyRules: historyRules, currentRules: currentRules };
      Store.jfredo.push(redo);
    }

    let index = getSheetIndex(Store.currentSheetIndex);
    Store.luckysheetfile[index][
      "luckysheet_alternateformat_save"
    ] = currentRules;

    setTimeout(function() {
      luckysheetrefreshgrid();
    }, 1);
  },
};

export default alternateformat;
